home *** CD-ROM | disk | FTP | other *** search
- GEYERSOFT präsentiert:
-
-
- KOMMANDOSHELL der ">"-Art, MSDOS-ähnlich
-
- Version 2.08
-
- written by Wolfgang Ambrosch
- Gregor Mendelstraße 11/2/25
- A-2514 Traiskirchen
- Tel. 02252/52 83 14
-
- last update 23.12.88
-
- Es handelt sich bei der vorliegenden Version noch nicht um die von mir
- angestrebte Endversion, es können daher im Betrieb durchaus noch Fehler
- auftreten (dafür ist die Shell Public-Domain und daher gratis!). Ich
- fühle mich für jeden Fehler verantwortlich, hafte jedoch nicht für
- etwaige Folgen. Den kommentierten Quelltext in C und Assembler gebe ich
- auf Anfrage und eine entsrechende Spende gerne weiter.
-
- Bemerkungen zur Entstehung:
-
- Mit dem Erwerb einer Festplatte begann bei mir zunächst nicht das
- goldene Zeitalter, sondern vor allem das Problem mit den vielen
- Fenstern und Laufwerken. Anstatt drei Laufwerken standen nun 6 auf
- meinem Desktop, und vor allem bei der Programmentwicklung waren die
- wichtigen Tools auf mindestens drei Fenster aufgeteilt, die nach jedem
- Programmlauf wieder neu aufgebaut werden mußten. Ein zusätzliches
- Problem war die MEGAMAX-Graphic-Shell, deren ansonsten recht praktische
- Fileselectorboxen nur Laufwerke bis F: kennen; meinen RAMDISK hat aber
- leider die Bezeichnung G:.
-
- Die Lösung dieser Probleme ist diese Shell, die sicher nicht "alles"
- kann, dafür aber recht klein ist und so noch anderen Programmen sowie
- einer großen Ramdisk Platz läßt. Geschrieben wurde sie eigentlich
- hauptsächlich wegen des 'PATH'-Kommandos; alle anderen Features sind
- nur deswegen vorhanden, damit ich nicht dauernd aussteigen und Dinge
- doch noch im Desktop erledigen muß oder ständig gebrauchte Hilfen wie
- "COPY" immer zuerst nachgeladen werden.
-
- Wer's (etwa von UNIX oder MSDOS) noch nicht kennt, dem sei das Feeling,
- das 'PATH' in Verbindung mit einer Festplatte bietet, einmal kurz
- beschrieben:
- Zum Beispiel sind beim Entwickeln von C-Programmen meine Sourcecodes
- und Libraries wegen der Geschwindigkeit auf der Ramdisk G:, der
- Compiler auf D:\COM, und diverse Utilities in C:\USR. Mit "PATH C:\
- USR\;D:\COM\" weise ich die Shell an, ein eingetipptes Kommando
- zunächst in der internen Kommandoliste und im momentanen Directory zu
- suchen (was immer getan wird), sodann aber in C:\USR und, wenn das
- Programm dort noch immer nicht zu finden ist, in D:\COM. Ohne ständig
- in Fenstern wühlen zu müssen, habe ich damit alle Hilfsprogramme, die
- in den angegebenen Directories vorhanden sind, ständig im Zugriff;
- zudem kann die Pfadeliste ja noch erweitert werden.
-
- Einige Features:
- Batchfiles (*.BAT) mit Parameterersetzung ($0 - $9)
- Es können *.PRG,*.TOS,*.TTP,*.BAT - Dateien gestartet werden
- Auch GEM-Programme werden fehlerfrei gestartet
- Aufrufen von Acessories (*.ACC) ist möglich.
- Setzen von Suchpfaden ist möglich (PATH - Befehl)
- Die Shell unterstützt "Output-Redirection"
- Das File AUTOEXEC.BAT wird, wenn vorhanden, nach dem Start
- automatisch geladen und ausgeführt
- Eine History-Funktion ist eingebaut (die letzen eingetippten
- Zeilen können mit den Tasten 'CURSOR UP' und 'CURSOR DOWN'
- erreicht werden.
- Argumente, die in Anführungszeichen (") eingeschlossen sind,
- werden nicht geteilt (interessant z.B. bei ECHO)
- Batch-Programme mit IF-ELSE-ENDIF sowie GOTO
- Die Shell ist 'case-sensitive', d.h. Groß- und Kleinbuchstaben
- werden unterschieden.
-
-
- Zur Parameterersetzung
-
- Werden einem Batch-Programm Parameter übergeben, so können diese mit
- den symbolischen Bezeichnungen $1 - $9 angesprochen werden (es sind
- also maximal 9 Parameter sinvoll - weitere werden ignoriert). Der
- Bezeichner $0 bezieht sich auf den Namen des Kommandos.
- Ein Beispiel: folgendes Batch-Programm (Extension .BAT) compiliert und
- linkt ein Programm.
-
- COMPILER $1.c
- LINKER $1.o -o $1.tos
-
- Wenn dieses Batch-Programm zum Beispiel 'CL' heißt, können sie folgende
- Zeile eingeben:
-
- CL test
-
- Die Shell macht daraus:
-
- COMPILER test.c
- LINKER test.o -o test.tos
-
-
- Zu den Environment-Variablen
-
- Das 'Environment' ist eine Liste von Null-terminierten Strings, deren
- Adresse jedem aufgerufenen Programm mitgegeben wird. Jeder String ist
- von der Form 'NAME=IRGENDWAS', wobei 'NAME' der Name der betreffenden
- Environmentvariablen ist, und 'IRGENDWAS' ihr Inhalt. Diese Variablen
- können auch von der Shell aus genutzt werden. Nehmen wir an, sie
- definieren eine Variable mit
-
- set EDITOR=C:\USR\VI.PRG
-
- Diese Variable wird Teil des Environments. Sie können nun den Editor
- auch mit folgender Zeile erreichen:
-
- $EDITOR
-
- Die Shell macht daraus:
-
- C:\USR\VI.PRG
-
- und startet ihren Editor aus dem richtigen Verzeichnis (egal, wo sie
- gerade sind). Sollte nach dem Variablennamen nicht mindestens in LeerÕ
- zeichen oder das Zeilenende folgen, ist der Name zusätzlich mit runden
- Klammern einzuschließen, in unserem Beispiel also $(EDITOR). Dieses
- Feature kann viel Tipparbeit sparen - vergessen sie aber nicht, daß
- Groß- und Kleinschreibung bei ihren Namen beachtet wird! Übrigens:
-
- set EDITOR=
-
- löscht den Eintrag "EDITOR" in der Environmentliste wieder.
-
-
- Zur ALIAS-Kommandoersetzung
-
- Ähnlich wie die Verwaltung der Environment-Variablen funktioniert die
- Verwaltung der alias-Liste. Sie dient ebenfalls dazu, Tipparbeit zu
- sparen, ersetzt aber, anders als die Variablen, nur das erste Wort in
- einer Zeile durch einen beliebigen Text. Analog zum obigen Beispiel
- können wir definieren:
-
- alias EDITOR=C:\USR\VI.PRG
-
- In der Zeile
-
- EDITOR command.c
-
- Wird nun der EDITOR durch C:\USR\VI.PRG ersetzt, und tatsächlich ausÕ
- geführt wird dann die Zeile "C:\USR\VI.PRG command.c".
-
-
- Zur Input/Output-Redirection
-
- Manchmal kann es sehr praktisch sein, eine Ausgabe, zum Beispiel die
- des "dir"-Befehles, nicht auf dem Bildschirm, sondern in einer Datei zu
- haben. Dazu dient die "Redirection". Die Zeile
-
- dir *.c >file
-
- schreibt die Ausgabe von "dir" in das File "file". Auch das Anhängen an
- ein bestehendes File ist möglich. Mit
-
- dir *.h >>file
-
- wird an das vorher angelegt File zusätzlich die Ausgabe des zweiten
- "dir"-Befehles angehängt. Für die Druckerausgabe (an der parallelen
- Schnittstelle) existiert der spezielle Filename PRN:. Auch mit manchen
- externen Programmen funktioniert die Redirection. Für Experten: sie
- funktioniert genau mit den Programmen, die die GEMDOS-Funktion Fwrite
- (Nummer $40) verwenden.
-
- Analoges gilt für die Eingabe:
-
- ask <file
-
- holt sich die gewünschte Eingabe aus dem File 'file'. Die
- Input-Redirection wirkt auf Programme, die die GEMDOS-Funktion Fread
- verwenden.
-
-
- Batch-Programme mit if - else - endif und goto
-
- Um Batch-Programme flexibel zu machen, habe ich auch die wichtigsten
- Ablaufkontrollmechanismen eingebaut. Die Funktion des 'if'-Kommandos
- ist einfach: Jedes Programm sollte einen Returncode zurückgeben,
- genauso wie die eingebauten Funktionen. Wenn dieser 0 ist, wird
- angenommen, daß das Programm fehlerfrei gelaufen ist, Werte ungleich 0
- zeigen Fehler an. 'if' nimmt als Parameter ein beliebiges Kommando und
- testet den Returncode. Bei 0 - also fehlerfreier Ausführung - werden
- die Kommandozeilen unmittelbar nach dem 'if' ausgeführt, bei jedem
- anderem Returncode sucht die Shell nach dem nächsten 'else' oder
- 'endif'. Danach wird die Ausführung in der Zeile nach dem 'else' oder
- 'endif' fortgesetzt. Geschachtelte 'if - else - endif' Konstrukte sind
- ebenfalls möglich. Ein Beispiel:
-
- if exist test.prg
- echo "Programm vorhanden"
- else
- echo "Programm nicht vorhanden"
- cc test.c -o test.prg
- endif
-
- Dieses kleine Batch-Programm schaut nach, ob ein Programm mit Namen
- 'test.prg' im aktuellen Directory vorhanden ist. Wenn ja, wird
- 'Programm vorhanden' ausgegeben, wenn nein, erscheint 'Programm nicht
- vorhanden' auf dem Bildschirm und es wird aus dem Sourcecode
- compiliert.
-
-
- KOMMANDOLISTE
-
- In der Kommandoliste gelten folgende Konventionen:
- Klein geschriebene Worte sind "Terminalsymbole", d.h. in der Shell
- genauso einzugeben.
- Groß geschriebene Worte sind Variable, die bei Gebrauch durch andere
- Namen (oder Zahlen...) zu ersetzen sind.
- Argumente in eckigen Klammern ([,]) können weggelassen werden.
- Argumente in geschweiften Klammern ({,}) dürfen mehrmals oder auch gar
- nicht vorkommen.
-
-
- acc NAME [MENU-ID]
- ruft ein Acessory auf. NAME ist der Filename des Acessories ohne
- Extension (bei "ABC.ACC" also nur "ABC"), "MENU-ID" ist die
- Menü-Identifikation des Acessories, d.h. sein Platz in der
- Desktop-Menüleiste. Sie wird von 0 weg gezählt, ihr Defaultwert ist 0,
- sodaß die "menu-id" beim obersten Acessory weggelassen werden kann.
- Nachdem das Acessory beendet wurde, nocheinmal mit der Maus klicken!
-
- alias [ALIAS=SOMETHING]
- definiert ein "Alias" (Beschreibung siehe oben) unter dem Namen
- "alias". "alias" ohne Parameter gibt eine Liste der definierten Namen
- aus.
-
- ask [TEXT]
- gibt den optionalen TEXT aus und wartet dann auf eine
- Benutzereingabe. Bei "j","J","Y" oder "y" wird 0 retourniert, bei "N"
- oder "n" 1. Jede andere Eingabe führt zur Wiederholung des Vorganges.
- Ein Befehl für den Batchbetrieb, wo er in Verbindung mit if-then-else
- recht praktisch ist.
-
- cd [DRIVE:]PFAD
- Change Directory. Wechselt den Defaultpfad
-
- chmod [MODUS] PFAD
- Wenn der optionale MODUS angegeben ist, wird das Fileattributbyte des
- durch PFAD angegebenen Files gesetzt. Dabei wird MODUS als Oktalzahl
- interpretiert. Wenn MODUS nicht angegeben ist, wird das
- Fileattributbyte gelesen und ausgegeben.
-
- cls
- Löscht den Bildschirm
-
- color NUMMER
- NUMMER = 0: Weiße Schrift auf schwarzem Hintergrund
- NUMMER = 1: Schwarze Schrift auf weißem Hintergrund
-
- copy [DRIVE:]SOURCENAME [DRIVE:][TARGETPFAD\[TARGETNAME]]
- kopiert SOURCE auf TARGET
-
- del [DRIVE:]FILENAME {[DRIVE:]FILENAME}
- löscht das angegebene File (Wildcards sind möglich).
-
- dir [[DRIVE:]SCOPE] ["/w"]
- zeigt das Directory an. Mit Switch "/W" werden nur die Filenamen
- angezeigt.
-
- echo on | off | TEXT
- echo on/off schaltet die Kommandoausgabe im Batchbetrieb ein oder
- aus. Die Defaulteinstellung ist off.
- echo TEXT gibt den Text aus (wenn der Text länger als ein Wort ist,
- muß er in Anführungszeichen gesetzt werden)
-
- errorlevel ZAHL
- Überprüft den zuletzt aufgetretenen Fehlercode. Ist er größer oder
- gleich der ZAHL , wird 0 retourniert, ansonsten 1.
-
- exist FILENAME
- Überprüft, ob das angegebenen File vorhanden ist. Praktisch für den
- Batchbetrieb.
-
- if - else - endif
- siehe oben
-
- goto
- siehe oben
-
- map WILDCARD KOMMANDO
- Expandiert WILDCARD. Ruft für jeden aus der Expansion erhaltenen Namen
- KOMMANDO auf und führt dabei folgende Ersetzungen durch:
- %@ wird ersetzt durch vollen Pfad, Filename und Extension
- %B wird ersetzt durch Filename und Extension (ohne Pfad)
- %P wird ersetzt durch Pfadname
- %N wird ersetzt durch Filename, ohne Pfad und ohne Extension
- %E wird ersetzt durch Extension, ohne Pfad und ohne Filenam
-
- md [DRIVE:]PFAD
- legt ein Subdirectory an
-
- path [pfad]{";"pfad}
- Zeigt ohne Argument die vorhandenen Suchpfade an. Mit Argument werden
- die (durch Strichpukte getrennten) Pfade übernommen. Gesucht wird von
- links nach rechts. Übrigens werden auch etwaige Resourcefiles von
- Programmen in anderen als dem aktuellen Directory gefunden - eine
- kleine Änderung im TRAP #1-Handler macht's möglich (Nebenwirkungen
- nicht ausgeschlossen!).
-
- pause [TEXT]
- Gibt den TEXT (wenn vorhanden) aus und unterbricht die Ausführung
- eines Batchfiles. Mit der Taste 'ESCAPE' kann die Ausführung
- abgebrochen werden.
-
- rd [DRIVE:]PFAD
- löscht ein (leeres) Subdirectory
-
- rd -r PFAD
- löscht das angegebene Subdirectory und alle darin enthaltenen Files
- und Directories.
-
- ren NAME1 NAME2
- benennt das File NAME1 in NAME2 um.
-
- reverse
- Tauscht Schreib- und Hintergrundfarbe gegeneinander aus.
-
- seconds KOMMANDO
- Gibt die für die Ausführung von KOMMANDO verbrauchte Zeit in
- Zehntelsekunden an.
-
- set [VAR=SOMETHING]
- Fügt den Parameter an die Environmentliste an. Wenn der Variablenname
- VAR schon vorhanden war, wird der alte Inhalt SOMETHING durch den neuen
- Inhalt überschrieben. SET ohne Parameter gibt das Environment aus.
-
- type NAME
- Gibt das File NAME aus. Bei Druck von 'SPACE' oder 'CTRL-S' wird die
- Ausgabe angehalten; bei Druck von 'CTRL-C' wird die Ausgabe
- unterbrochen.
-
- vol [DRIVE:]
- zeigt Volume-Label (wenn vorhanden) und verfügbaren Speicherplatz auf
- dem aktuellen oder angegebenen Laufwerk an.
-